# -*- coding: utf-8 -*-
# @Author : 左手
# @File : 02-线程之间是否会资源混乱.py
# @Software: PyCharm
# @Date : 2024/10/29 19:47


import threading

num = 0  # 定义一个全局变量num

def task():
    global num  # 声明为全局变量
    for i in range(10000000):  # 1千万
        # 不需要在这里重复上锁和解锁
        pass
        # 再循环外部只上锁一次， 以修改num并保护它
    mutex.acquire() # 上锁
    try:
        num += 100000000  # 直接增加循环的总迭代次数
    finally:
        mutex.release()
    print(f'task num={num}')  # 1千万

def task1():
    global num  # 声明为全局变量
    for i in range(10000000):  # 1千万
        # 不需要在这里重复上锁和解锁
        pass
        # 再循环外部只上锁一次， 以修改num并保护它
    mutex.acquire()  # 上锁
    try:
        num += 100000000  # 直接增加循环的总迭代次数
    finally:
        mutex.release()
    print(f'task1 num={num}')  # 1千万

if __name__ == '__main__':
    # 创建一把锁
    # mutex = threading.Lock()  # 上一把锁 必须解一把锁
    mutex = threading.Lock()  # 上一把锁 必须解一把锁
    # 创建一个子线程
    t1 = threading.Thread(target=task)
    t2 = threading.Thread(target=task1)

    # 启动线程
    t1.start()
    t2.start()

    # 主线程
    print(f'main num={num}') # 2千万


"""
python解释器  全局解释器锁  咖啡店里面咖啡师

在任何情况下  是不是只有一个顾客 能够获取这一位咖啡师的服务


低耦合  高内聚
"""